package com.cy.jt.security.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AnyRequestMatcher;
import javax.xml.ws.WebServiceException;
/*由@Configuration注解描述的类为spring中的配置类,配置类会在你spring
* 工程启动时优先加载,在配置类中通常会对第三方资源进行初始配置
* */



@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
        //对http请求的安全控制进行配置
    @Override
    protected  void  configure(HttpSecurity http) throws Exception{
        //1.关闭跨域攻击,不关闭容易出错
        http.csrf().disable();
        //2.配置登录url(登录表单使用那个表单)
        http.formLogin()
                .loginPage("/login.html")//登录页面
                .loginProcessingUrl("/login")//与form表单中的action值相同
//                .usernameParameter("username")//与form表单中input元素的name属性相同
//                .passwordParameter("password")
                .defaultSuccessUrl("/index.html");//登录成功的url
//                .successForwardUrl("/index.html");
        //3.放行登陆(不需要认证就可以访问)
        http.authorizeRequests()
                .antMatchers("/login.html")
                .permitAll()//允许登录
                .anyRequest().authenticated();//除了以上资源必须认证才可以访问
    }
    /*
    * 定义SpringSecurity密码加密对象
    * @Bean 注解通常会在@Configuration注解中描述方法
    * 用于告诉spring框架这个方法的返回值会交给spring管理,并spring
    * 管理的这个对象起个默认名字,这个名字与方法名相同,当然也可以通过
    * @Bean注解起名字
    * */
    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}
